/**
    Copyright (C) 2012 Guido Ludwig

    This file is part of JATT.
	http://code.google.com/p/jatt/

    JATT is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package de.guidoludwig.jatt.chain.commands;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import de.guidoludwig.jatt.JATT;
import de.guidoludwig.jatt.chain.JATTContext;
import de.guidoludwig.jatt.chain.commands.config.WriteArtworkConfig;
import de.guidoludwig.jatt.util.AudioInfo;

/**
 * @author Guido Ludwig
 */
public class WriteArtworkCommand extends JATTCommand<WriteArtworkConfig> {


	@Override
	protected boolean execute0(JATTContext context) {
		File folderImage = context.getFolderImageFile();
		if (folderImage == null) {
			JATT.debug("No Folder Image Set, Artwork can not be written");
			return false;
		}
		List<AudioInfo> toMove = tag(context, context.getUntagged(), folderImage);
		for (AudioInfo audioInfo : toMove) {
			context.moveToTagged(audioInfo);
		}

		if (getConfig().isOverWrite()) {
			tag(context, context.getTagged(), folderImage);
		}
		return false;
	}

	private List<AudioInfo> tag(JATTContext context, List<AudioInfo> toTag, File folderImage) {
		List<AudioInfo> toMove = new ArrayList<AudioInfo>();
		for (AudioInfo info : toTag) {
			try {
				info.tagFile(folderImage);
				JATT.debug("Artwork tagged for "
						+ info.getFile().getAbsolutePath());
				toMove.add(info);
			} catch (Exception e) {
				JATT.error(e);
			}
		}
		return toMove;
	}

}
